home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_gene.lha / LEDA-3.1c-generic / incl / LEDA / impl / k_heap.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-05  |  2.1 KB  |  103 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  k_heap.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef LEDA_KHEAP_H
  16. #define LEDA_KHEAP_H
  17.  
  18. //------------------------------------------------------------------------------
  19. // k-nary Heaps
  20. //------------------------------------------------------------------------------
  21.  
  22.  
  23. #include <LEDA/basic.h>
  24.  
  25. class k_heap_elem
  26. {
  27.   friend class k_heap;
  28.  
  29.   GenPtr key;
  30.   GenPtr inf;
  31.  
  32.   int index;
  33.  
  34.   k_heap_elem(GenPtr k, GenPtr i, int pos) { key = k; inf = i; index = pos; }
  35.  
  36.   LEDA_MEMORY(k_heap_elem)
  37.  
  38. };
  39.  
  40.  
  41. typedef k_heap_elem* k_heap_item;
  42.  
  43.  
  44. class k_heap  {
  45.  
  46. virtual int  cmp(GenPtr x, GenPtr y) const { return compare(x,y); }
  47. virtual void copy_key(GenPtr&)   const {}
  48. virtual void copy_inf(GenPtr&)   const {}
  49. virtual void clear_key(GenPtr&)  const {}
  50. virtual void clear_inf(GenPtr&)  const {}
  51. virtual void print_key(GenPtr x) const { Print(x); }
  52. virtual void print_inf(GenPtr x) const { Print(x); }
  53.  
  54. virtual int  int_type() const { return 0; }
  55.  
  56.  
  57. int          K;
  58. int          count;
  59. int          max_size;
  60. k_heap_item* HEAP;
  61.  
  62. void rise(int,k_heap_item);
  63. void sink(int,k_heap_item);
  64.  
  65. void check(k_heap_item);
  66.  
  67. protected:
  68.  
  69. k_heap_item item(GenPtr p) const { return k_heap_item(p); }
  70.  
  71. public:
  72.  
  73. k_heap_item insert(GenPtr, GenPtr);
  74. k_heap_item find_min()  const      { return HEAP[1];  }
  75. k_heap_item first_item() const     { return HEAP[1]; }
  76. k_heap_item next_item(k_heap_item it) const { return HEAP[it->index+1];}
  77.  
  78. void decrease_key(k_heap_item, GenPtr);
  79. void change_inf(k_heap_item, GenPtr);
  80. void del_item(k_heap_item);
  81. void del_min() { del_item(find_min()); }
  82.  
  83. GenPtr key(k_heap_item it) const { return it->key; }
  84. GenPtr inf(k_heap_item it) const { return it->inf; }
  85.  
  86. int  size()    const  { return count;    }
  87. bool empty()   const  { return count==0; }
  88.  
  89. void clear();
  90. void print();
  91.  
  92. k_heap& operator=(const k_heap&);
  93.  
  94. k_heap(int n=0,int k=2);  // default: binary heap
  95. k_heap(const k_heap&);
  96.  
  97. virtual ~k_heap();
  98.  
  99. };
  100.  
  101. #endif
  102.